# @Filename:    switch_window
# @Author:      王佳伟
# @Time:        2025-02-20 14:53
# @Describe:    窗口切换
import time

from selenium import webdriver
from selenium.webdriver.common.by import By


class Alert:
    def __init__(self):
        # 创建一个Chrome浏览器的WebDriver示例
        self.driver = webdriver.Chrome()
        # ChromeOptions类提供了对Chrome浏览器各种选项进行配置的方法;
        # 在excludeSwitches参数中，将enable-logging指定为要排除的选项，表示不启用浏览器的日志功能
        # options = webdriver.ChromeOptions()
        # options.add_experimental_option('excludeSwitches', ['enable-logging'])
        # self.drive = webdriver.Chrome(options=options)
        # 最大化窗口
        self.driver.maximize_window()
        # 隐式等待，设置最大的等待时长，只对查找元素（find_elementXXX）生效
        self.driver.implicitly_wait(2)

    def method(self):
        """代码执行"""
        # 通过get()方法打开网页
        self.driver.get('https://www.baidu.com')
        # 搜索框输入：CSDN
        self.driver.find_element(By.CSS_SELECTOR, '[name="wd"]').send_keys("csdn")
        time.sleep(0.5)
        # 点击百度一下
        self.driver.find_element(By.CSS_SELECTOR, '[id="su"]').click()
        time.sleep(0.5)
        # 点击CSDN官网，开启新窗口，进入CSDN官网
        self.driver.find_element(By.LINK_TEXT, 'CSDN技术社区').click()
        time.sleep(3)

        # 获取当前窗口（当前句柄名称-handle）
        windows = self.driver.current_window_handle
        print(f"当前handle：{windows}")
        # 获取所有窗口(所有句柄名称-handle),以列表的形式返回过来
        all_windows = self.driver.window_handles
        print(f"所有handle：{all_windows}")

        # 切换窗口，根据所有窗口的下标来切换，窗口顺序从0开始。(此时有两个窗口，第一个百度，第二个csdn)
        self.driver.switch_to.window(all_windows[0])
        time.sleep(3)
        # 切换到最新窗口的句柄(csdn)
        self.driver.switch_to.window(all_windows[-1])

if __name__ == '__main__':
    Alert.__init__(self=Alert)
    Alert.method(self=Alert)

